#ifndef SessionFriendArea_H
#define SessionFriendArea_H

#include <QWidget>
#include <QScrollArea>
#include <QPushButton>
#include <QLabel>


///////////////////////////////////////////////////////////////
/// Item类型
///////////////////////////////////////////////////////////////
enum class ItemType
{
    SESSION,
    FRIEND,
    APPLY
};



///////////////////////////////////////////////////////////////
/// 会话滚动区域的实现
///////////////////////////////////////////////////////////////

class sessionFriendArea : public QScrollArea
{
    Q_OBJECT
public:
    explicit sessionFriendArea(QWidget *parent = nullptr);

    void addItem(ItemType type,const QString& id,
                 const QIcon& avatar,const QString& name,const QString& lastMessage);

    //通过下标点击某个Item
    void clickItem(int index);

    //清空该区域中所有item
    void clear();



private:
    QWidget* container;

signals:
};

///////////////////////////////////////////////////////////////
/// 滚动区域中Item的基类
///////////////////////////////////////////////////////////////

class sessionFriendItem:public QWidget
{
    Q_OBJECT
public:
    sessionFriendItem(QWidget* owner,const QIcon& avatar,const QString& name);
    ////Item被点下的执行逻辑
    void beClicked();
    //这个是被点下后的除颜色外的执行逻辑，需要确保被子类重写，本身不提供执行逻辑
    virtual void active();


    void paintEvent(QPaintEvent* event) override;
    void mousePressEvent(QMouseEvent* event) override;
    void enterEvent(QEnterEvent* event) override;
    void leaveEvent(QEvent* event) override;
private:
    QPushButton* avatarBtn;
    QWidget* owner;
    bool selected = false;
};


///////////////////////////////////////////////////////////////
/// 会话Item
///////////////////////////////////////////////////////////////

class sessionItem:public sessionFriendItem
{
    Q_OBJECT
public:
    sessionItem(QWidget* owner,const QString& sessionId,const QIcon& avatar
                ,const QString& name,const QString& lastMessage);
    virtual void active() override;
    //处理一个会话的最后一条消息在界面上的更新，包括未读消息
    void updateLastMessage(const QString& sessionId);
private:
    QString sessionId;
    QString lastMessage;
protected:
    QLabel* messageLabel;
};


///////////////////////////////////////////////////////////////
/// 好友Item
///////////////////////////////////////////////////////////////

class friendItem:public sessionFriendItem
{
    Q_OBJECT
public:
    friendItem(QWidget* owner,const QString& userId,const QIcon& avatar,const QString& name);
    virtual void active() override;
private:
    QString userId;
};


///////////////////////////////////////////////////////////////
/// 好友申请Item
///////////////////////////////////////////////////////////////

class applyItem:public sessionFriendItem
{
    Q_OBJECT
public:
    applyItem(QWidget* owner,const QString& userId,const QIcon& avatar,const QString& name);
    virtual void active() override;


private:
    void clickYesApply();
    void clickNoApply();

    QString userId;

};

#endif // sessionFriendArea_H
